Modern computer systems require a large amount of random access memory (RAM) to run software programs. Software, such as the operating system and various application programs, constantly interact with data stored in RAM. Each application/process is assigned pages of RAM to use. As computers became more sophisticated and complex, processes required more memory access than is physically available in RAM. Virtual addresses for memory overcome this problem by allowing processes to share physical RAM memory. Virtual memory is implemented in a computer system by writing data to non-volatile memory, such as a disk drive, instead of maintaining all process data in RAM.
A memory manager of the computer system ensures that data associated with virtual address is in physical RAM when needed. When data is not actively being used by a process, the data may be written to a pagefile stored in non-volatile memory, freeing up space in RAM for other active processes. If the inactive data is needed by a process, the data must be copied from non-volatile memory to RAM so that it is accessible to the process. If the amount of memory required by all the processes on the computer system is too much in comparison to the available physical RAM, system performance may suffer due to too much swapping of data back and forth between RAM and non-volatile memory slowing the system down.